#[macro_export] // 把宏导出到当前的crate的根命名空间 使得其他crate可以通过crate_name::mod_pub!调用
macro_rules! mod_pub { // 批量生成公有子模块
    [ $( $name:ident $(,)? )+ ] => {
        $(
            pub mod $name;
        )+  // 会对捕获的对象各自生成一次
    };
}
// example 
// jizi_macro::mod_pub!(A B)  展开得到
// pub mod A;
// pub mod B; 

#[macro_export]
macro_rules! mod_flat {  // 导出该mod所有pub  使之直接可用
    ( $( $name:ident $(,)? )+)  => { // 捕获内容[...] 和 (...) 是等价的  用哪种都可以
        $(
            mod $name;
            pub use $name::*;
        )+
    };
}
// mod flat和mod pub的区别在于 前者私有化mod 只是将其中公有项目全部顶级导出